Load Approd Appropriate Packages

library(knitr)
library(tidyverse)
── Attaching core tidyverse packages ─────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.3     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.3     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.2     ── Conflicts ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(janitor)

Attaching package: ‘janitor’

The following objects are masked from ‘package:stats’:

    chisq.test, fisher.test
library(lubridate)
library(here) 
here() starts at C:/Users/thistljy/Documents/ds241_final
library(sf) 
Warning: package ‘sf’ was built under R version 4.3.2Linking to GEOS 3.11.2, GDAL 3.7.2, PROJ 9.3.0; sf_use_s2() is TRUE
library(tmap)
Warning: package ‘tmap’ was built under R version 4.3.2Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Breaking News: tmap 3.x is retiring. Please test v4, e.g. with
remotes::install_github('r-tmap/tmap')
library(tidycensus)
Warning: package ‘tidycensus’ was built under R version 4.3.2

Knitr is used for properly transforming the r notebook into an html file. The tidyverse is used to tidy data using other packages within in such as dplyr. The janitor packages is used to clean up the variable names from the data sets. The lubridate library is used to work with date-times. The here library is used to locate files on the computer to make it easier to load in the data sets. The sf library is used to work with spatial data. The tmap library is used to create interaactive maps. The tidycensus data is used to get data from the U.S Census Bureau data via codes.

Read in the captial bike share data

bikes = (read.csv(here("data_raw", "202309-capitalbikeshare-tripdata.csv"))) |> clean_names()

Read in the Public Bike Rac


racks = st_read((here("data_raw", "Public_Bike_Racks.geojson"))) |> clean_names() 
Reading layer `Public_Bike_Racks' from data source `C:\Users\thistljy\Documents\ds241_final\data_raw\Public_Bike_Racks.geojson' using driver `GeoJSON'
Simple feature collection with 3558 features and 2 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: -77.1107 ymin: 38.81903 xmax: -76.91907 ymax: 38.98663
Geodetic CRS:  WGS 84

Api Key to access the census data

census_api_key("9fc5d3792d3a5e922287c3f4e9995118766d50a2")
To install your API key for use in future sessions, run this function with `install = TRUE`.

Loading in the codes that is linked to access the specific census data

v2018 = load_variables(2018, "acs5")

Load the relevant data from the 2017-2021 Census Data for Washington DC

df_censcus=get_acs(geography = "tract",
                  variables=c("vehicles"="B08141_001",
                              "population" = "B01001_001",
                               "public_transportion" = "B08006_008"),
                  state="DC",geometry=TRUE,year=2021) 
Getting data from the 2017-2021 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
Using FIPS code '11' for state 'DC'

  |                                                                                                                                                                   
  |                                                                                                                                                             |   0%
  |                                                                                                                                                                   
  |=========================================================                                                                                                    |  36%
  |                                                                                                                                                                   
  |========================================================================================                                                                     |  56%
  |                                                                                                                                                                   
  |===================================================================================================================================================          |  94%
  |                                                                                                                                                                   
  |=============================================================================================================================================================| 100%
View(racks)

For this analysis, we will need the amount of vehiclces used in a specific location in Washington D.c., the population for each area in Washington D.C., and the usage of public transportation in those same areas.

Make sure our data frames plot

plot(df_censcus)

plot(racks)

Make each observation of vehicles, population, and public transportation into their own columns


tmap_mode("view")
tmap mode set to interactive viewing
df_cens=df_censcus %>% 
  select(-moe) %>% 
  pivot_wider(names_from = "variable", 
              values_from = "estimate")|> 
  mutate(pub_pop = public_transportion / population,
         v_pop = vehicles / population)

Read the Signed Bike Routes data into a spatial data frame.

bike_routes = st_read((here("data_raw", "Signed_Bike_Routes.geojson"))) |> clean_names() 
Reading layer `Signed_Bike_Routes' from data source `C:\Users\thistljy\Documents\ds241_final\data_raw\Signed_Bike_Routes.geojson' using driver `GeoJSON'
Simple feature collection with 1024 features and 37 fields
Geometry type: LINESTRING
Dimension:     XY
Bounding box:  xmin: -77.08773 ymin: 38.8404 xmax: -76.92188 ymax: 38.98634
Geodetic CRS:  WGS 84

Plot data

df_cens_adj = df_cens |> st_transform(4326)
bike_routes = st_as_sf(bike_routes, crs=st_crs(df_cens_adj))

racks = st_as_sf(racks, crs=st_crs(df_cens_adj))
tm_shape(df_cens) +tm_polygons(c("pub_pop", "v_pop"), alpha=.5) + tm_shape(racks) +tm_symbols(size = 0.01, alpha = 0.5) +   
tm_shape(bike_routes) + tm_lines(col="blue",lwd=1,alpha= 1)

Data Sources:

Public Bike Racks: https://opendata.dc.gov/explore?collection=Dataset&query=Public%20Bike%20Racks Bike Share Data: https://capitalbikeshare.com/system-data Signed Bike Routes: https://opendata.dc.gov/explore?collection=Dataset&query=Bike%20Routes

LS0tDQp0aXRsZTogIkhvdyB0aGUgZmxvdyBvZiB0cmFmZmljIG9mIGNhcnMgY29ycmVsYXRlcyB3aXRoIGJpa2Ugc2hhcmUgZGF0YSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCi0gTG9vayBmb3IgYXJlYXMgdGhhdCBwZW9wbGUgZG8gbm90IHVzZSBjYXJzIGFzIG11Y2ggaW4gDQotIFB1dCBtb3JlIGJpa2VzIGluIHRoZSBhcmVhcyB3aGVyZSB0aGVyZSBhcmUgbGVzcyBwZW9wbGUgY29tbXV0aW5nIHRvIHdvcmsgaW4gY2Fycw0KLSBSZWxhdGlvbiBiZXR3ZWVuIG1vdG9yaXplZCB2ZWhpY2xlcyBhbmQgYmlrZXMNCi0gUGFya2luZyBzcGFjZXMNCi0gTGFzdCBtaWxlDQotIFdoZXJlIGJlc3QgdG8gcGxhY2UgYmlrZSBzdGF0aW9ucyANCg0KDQojIExvYWQgQXBwcm9kIEFwcHJvcHJpYXRlIFBhY2thZ2VzDQoNCmBgYHtyfQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGhlcmUpIA0KbGlicmFyeShzZikgDQpsaWJyYXJ5KHRtYXApDQpsaWJyYXJ5KHRpZHljZW5zdXMpDQpgYGANCktuaXRyIGlzIHVzZWQgZm9yIHByb3Blcmx5IHRyYW5zZm9ybWluZyB0aGUgciBub3RlYm9vayBpbnRvIGFuIGh0bWwgZmlsZS4NClRoZSB0aWR5dmVyc2UgaXMgdXNlZCB0byB0aWR5IGRhdGEgdXNpbmcgb3RoZXIgcGFja2FnZXMgd2l0aGluIGluIHN1Y2ggYXMgZHBseXIuDQpUaGUgamFuaXRvciBwYWNrYWdlcyBpcyB1c2VkIHRvIGNsZWFuIHVwIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoZSBkYXRhIHNldHMuDQpUaGUgbHVicmlkYXRlIGxpYnJhcnkgaXMgdXNlZCB0byB3b3JrIHdpdGggZGF0ZS10aW1lcy4NClRoZSBoZXJlIGxpYnJhcnkgaXMgdXNlZCB0byBsb2NhdGUgZmlsZXMgb24gdGhlIGNvbXB1dGVyIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGxvYWQgaW4gdGhlIGRhdGEgc2V0cy4NClRoZSBzZiBsaWJyYXJ5IGlzIHVzZWQgdG8gd29yayB3aXRoIHNwYXRpYWwgZGF0YS4NClRoZSB0bWFwIGxpYnJhcnkgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhYWN0aXZlIG1hcHMuDQpUaGUgdGlkeWNlbnN1cyBkYXRhIGlzIHVzZWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgVS5TIENlbnN1cyBCdXJlYXUgZGF0YSB2aWEgY29kZXMuIA0KDQojIFJlYWQgaW4gdGhlIGNhcHRpYWwgYmlrZSBzaGFyZSBkYXRhDQoNCmBgYHtyfQ0KYmlrZXMgPSAocmVhZC5jc3YoaGVyZSgiZGF0YV9yYXciLCAiMjAyMzA5LWNhcGl0YWxiaWtlc2hhcmUtdHJpcGRhdGEuY3N2IikpKSB8PiBjbGVhbl9uYW1lcygpDQpgYGANCg0KIyBSZWFkIGluIHRoZSBQdWJsaWMgQmlrZSBSYWMNCg0KYGBge3J9DQpyYWNrcyA9IHN0X3JlYWQoKGhlcmUoImRhdGFfcmF3IiwgIlB1YmxpY19CaWtlX1JhY2tzLmdlb2pzb24iKSkpIHw+IGNsZWFuX25hbWVzKCkgDQpgYGANCiANCiMgQXBpIEtleSB0byBhY2Nlc3MgdGhlIGNlbnN1cyBkYXRhDQpgYGB7cn0NCmNlbnN1c19hcGlfa2V5KCI5ZmM1ZDM3OTJkM2E1ZTkyMjI4N2MzZjRlOTk5NTExODc2NmQ1MGEyIikNCg0KYGBgDQojIExvYWRpbmcgaW4gdGhlIGNvZGVzIHRoYXQgaXMgbGlua2VkIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgY2Vuc3VzIGRhdGEgDQpgYGB7cn0NCnYyMDE4ID0gbG9hZF92YXJpYWJsZXMoMjAxOCwgImFjczUiKQ0KYGBgDQoNCiMgTG9hZCB0aGUgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSAyMDE3LTIwMjEgQ2Vuc3VzIERhdGEgZm9yIFdhc2hpbmd0b24gREMNCg0KYGBge3J9DQpkZl9jZW5zY3VzPWdldF9hY3MoZ2VvZ3JhcGh5ID0gInRyYWN0IiwNCiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcz1jKCJ2ZWhpY2xlcyI9IkIwODE0MV8wMDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHVsYXRpb24iID0gIkIwMTAwMV8wMDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdWJsaWNfdHJhbnNwb3J0aW9uIiA9ICJCMDgwMDZfMDA4IiksDQogICAgICAgICAgICAgICAgICBzdGF0ZT0iREMiLGdlb21ldHJ5PVRSVUUseWVhcj0yMDIxKSANCmBgYA0KRm9yIHRoaXMgYW5hbHlzaXMsIHdlIHdpbGwgbmVlZCB0aGUgYW1vdW50IG9mIHZlaGljbGNlcyB1c2VkIGluIGEgc3BlY2lmaWMgbG9jYXRpb24gaW4gV2FzaGluZ3RvbiBELmMuLCB0aGUgcG9wdWxhdGlvbiBmb3IgZWFjaCBhcmVhIGluIFdhc2hpbmd0b24gRC5DLiwgYW5kIHRoZSB1c2FnZSBvZiBwdWJsaWMgdHJhbnNwb3J0YXRpb24gaW4gdGhvc2Ugc2FtZSBhcmVhcy4gDQoNCiMgTWFrZSBzdXJlIG91ciBkYXRhIGZyYW1lcyBwbG90DQoNCmBgYHtyfQ0KDQpwbG90KGRmX2NlbnNjdXMpDQpwbG90KHJhY2tzKQ0KDQpgYGANCg0KIyBNYWtlIGVhY2ggb2JzZXJ2YXRpb24gb2YgdmVoaWNsZXMsIHBvcHVsYXRpb24sIGFuZCBwdWJsaWMgdHJhbnNwb3J0YXRpb24gaW50byB0aGVpciBvd24gY29sdW1ucw0KDQpgYGB7cn0NCg0KdG1hcF9tb2RlKCJ2aWV3IikNCg0KZGZfY2Vucz1kZl9jZW5zY3VzICU+JSANCiAgc2VsZWN0KC1tb2UpICU+JSANCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9ICJ2YXJpYWJsZSIsIA0KICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9ICJlc3RpbWF0ZSIpfD4gDQogIG11dGF0ZShwdWJfcG9wID0gcHVibGljX3RyYW5zcG9ydGlvbiAvIHBvcHVsYXRpb24sDQogICAgICAgICB2X3BvcCA9IHZlaGljbGVzIC8gcG9wdWxhdGlvbikNCg0KYGBgDQojIFJlYWQgdGhlIFNpZ25lZCBCaWtlIFJvdXRlcyBkYXRhIGludG8gYSBzcGF0aWFsIGRhdGEgZnJhbWUuIA0KDQpgYGB7cn0NCmJpa2Vfcm91dGVzID0gc3RfcmVhZCgoaGVyZSgiZGF0YV9yYXciLCAiU2lnbmVkX0Jpa2VfUm91dGVzLmdlb2pzb24iKSkpIHw+IGNsZWFuX25hbWVzKCkgDQpgYGANCg0KIyBQbG90IGRhdGENCmBgYHtyfQ0KZGZfY2Vuc19hZGogPSBkZl9jZW5zIHw+IHN0X3RyYW5zZm9ybSg0MzI2KQ0KYmlrZV9yb3V0ZXMgPSBzdF9hc19zZihiaWtlX3JvdXRlcywgY3JzPXN0X2NycyhkZl9jZW5zX2FkaikpDQoNCnJhY2tzID0gc3RfYXNfc2YocmFja3MsIGNycz1zdF9jcnMoZGZfY2Vuc19hZGopKQ0KdG1fc2hhcGUoZGZfY2VucykgK3RtX3BvbHlnb25zKGMoInB1Yl9wb3AiLCAidl9wb3AiKSwgYWxwaGE9LjUpICsgdG1fc2hhcGUocmFja3MpICt0bV9zeW1ib2xzKHNpemUgPSAwLjAxLCBhbHBoYSA9IDAuNSkgKyAgIA0KdG1fc2hhcGUoYmlrZV9yb3V0ZXMpICsgdG1fbGluZXMoY29sPSJibHVlIixsd2Q9MSxhbHBoYT0gMSkNCmBgYA0KDQoNCg0KIyBEYXRhIFNvdXJjZXM6DQoNClB1YmxpYyBCaWtlIFJhY2tzOiBodHRwczovL29wZW5kYXRhLmRjLmdvdi9leHBsb3JlP2NvbGxlY3Rpb249RGF0YXNldCZxdWVyeT1QdWJsaWMlMjBCaWtlJTIwUmFja3MNCkJpa2UgU2hhcmUgRGF0YTogaHR0cHM6Ly9jYXBpdGFsYmlrZXNoYXJlLmNvbS9zeXN0ZW0tZGF0YQ0KU2lnbmVkIEJpa2UgUm91dGVzOiBodHRwczovL29wZW5kYXRhLmRjLmdvdi9leHBsb3JlP2NvbGxlY3Rpb249RGF0YXNldCZxdWVyeT1CaWtlJTIwUm91dGVzDQoNCg0K